1. express 中间件
//#region 

中间件: 其实就是一个函数. 当浏览器给服务器发送请求,本来是直接执行服务器的路由的回调. 但是如果有中间件,则先执行中间件,然后执行路由的回调

中间的分类: 
    应用级中间件(自定义中间件) 我们自己写的中间件函数
    内置中间件  express内置的中间件
    第三方中间件 别人写的中间件函数,使用之前,需要下载
    路由器中间件

中间件的特点: 
    1. 中间件是线性执行模式. 按照书写顺序,一个接着一个执行 
    2. 整个请求响应过程中,req对象是同一个,res对象是同一个
    3. 中间件中的next表示下一个中间件, 如果调用next.才会继续往下执行.否则不执行后面的中间件和路由回调

    !!!!!! 注意: 中间件定义时,一定要写在路由前面. 而且复杂的情况下,要考虑中间件的顺序问题
//#endregion

2. mongodb 数据库软件
//#region 
数据库分类: 
    关系型数据库
        数据库软件 MySQL Oracle
            多个数据库
            多个表
            字段
            数据行

    非关系型数据库 MongoDB Redis
        数据库软件 
            多个数据库 
            多个集合 
            多个文档


    mongodb安装路径: C:\Program Files\MongoDB\Server\4.2\bin 

    mongod.exe 双击启动mongodb数据库软件
    mongo.exe 操作mongodb数据库软件的客户端 
    一般使用GUI工具,来操作mongodb数据库软件. 使用GUI工具时,一定要先保证mongodb启动,然后进行连接

    对于mongodb数据库软件的crud:

    添加数据: 
    db.teachers.insert({name:'hj',age:70, sex: 'x', info: 'lsp'}) //插入一条
    db.teachers.insert([{name:'lt',age:80, sex: 'male', info: 'lsp2'}, {name:'qy',age:18, sex: 'femalex', info: 'lsp3'}]) //插入多条
    db.teachers.insertMany([{name:'zs',age:16},{name:'ls',age:20}]) //插入一条
    db.teachers.insertOne({name:'xxx',age:23}) // 插入多条

    查询数据: 
    // db.teachers.find(查找条件,投影) 
    // 查询条件绝对了可以查找到多少条数据
    // 投影绝对了查找到的数据,展示哪些字段
    db.teachers.find({age: 18, name:'hj'}) //查找年龄是18并且name是hj的所有数据
    db.teachers.find({age: {$gt: 35}}) //年龄大于35
    db.teachers.find({age: {$in: [18,80]}}) // 年龄是18或80
    db.teachers.find({$or: [{age: 18}, {name:'xxx'}]}) //年龄是18或name是xxx
    db.teachers.find({age: {$ne: 18 }}) // 年龄不是18岁

    db.teachers.find({name: /^l/}) //姓名是l开头
    db.teachers.find({$where: function(){
        return this.name === 'hj'
    }})
    // 只看name
    db.teachers.find({}, {name: 1, _id:0})
    // 不看sex
    db.teachers.find({}, {sex:0})

    修改数据:
    db.teachers.update({age: {$gt: 18}},{$set: {info: 'old'}}) // 默认修改一条
    db.teachers.update({age: {$gt: 18}},{$set: {info: 'old'}}, {multi: true}) // 修改多条
    db.teachers.updateOne({age: {$lt: 25}},{$set: {info: 'young'}}) // 修改一条
    db.teachers.updateMany({age: {$lt: 25}},{$set: {info: 'young'}}) // 修改多条

    删除数据:
    db.teachers.remove({name: {$in: ['hj','lt']}}) 

//#endregion

3. mongoose
//#region 
node 平台内置mongodb模块
mongoose 第三方的包
mongoose作用: 在node中通过代码,对mongodb数据库软件进行增删改查
使用: 
1. npm i mongoose 
2. 引入 const mongoose = require('mongoose')
3. 连接 mongoose.connect('mongodb://127.0.0.1:27017/数据库的名字')
   如何判断连接成功? mongoose.connect返回promise,状态为成功表示连接成功,否则连接失败
4. 连接成功之后, 创建Schema对象 用来约束插入到数据库中数据格式 
    cosnt schema = new mongoose.Schema({
        属性: {
            required: 表示必填,
            type: 数据类型(js的数据类型),
            default: 默认值,
            unique: 表示值不能重复
        }
    })
5. 创建model对象(集合对象)
  const model = mongoose.model('集合名', schema)
6. 增删改查
    modle.create(文档对象,回调) //不写回调返回promise. promise成功,表示添加成功

//#endregion



